Optional Motifs.f

{ TO DO
   Add motif-sorting
   Opaque/transparent pass
}

Requires SORA\Transformations
Requires Collections
Requires Dorothy

Only Forth Definitions

node extend: motif
   transform.field t
   int.field w
   int.field h
   int.field d
   vector.field vel
   int.field 'show      \ must be a method
end-type

macro: motif.pos   motif.t.pos ;
macro: motif.angle   motif.t.rotation ;
macro: motif.scale  motif.t.scale ;
macro: motif.x   motif.t.pos.x ;
macro: motif.y   motif.t.pos.y ;
macro: motif.z   motif.t.pos.z ;
macro: motif.pan   motif.t.rotation.x ;
macro: motif.tilt   motif.t.rotation.y ;
macro: motif.rotation   motif.t.rotation.z ;
macro: motif.sx   motif.t.scale.x ;
macro: motif.sy   motif.t.scale.y ;
macro: motif.sz   motif.t.scale.z ;
macro: motif.color   motif.t.color ;
macro: motif.alpha   motif.t.color.a ;

method: motif.init
   $FFFFFFFF color.!
   255 alpha.!
   1.0 1.0 1.0 scale.! ;

: motif.new
   512 chunk dup init ;

: motif.make
   here 512 /allot dup init const ;

:[] motif.show:[   ( motif xt -- ) ( -- ) swap 'show ! ;

macro: children?  first ;

:[] motif.each:[  ( motif xt -- ) ( motif -- )
   swap << first
           begin dup while
              dup next >q over execute q>
           repeat 2drop >> ;

method: motif.show   'show @ execute ;
